package com.zihan.service;

import com.alibaba.fastjson.JSONObject;
import com.zihan.domain.dto.ProjectDTO;
import com.zihan.domain.entity.Project;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zihan.domain.entity.ProjectMember;
import com.zihan.domain.entity.ProjectMilestone;
import com.zihan.domain.result.PageResult;
import com.zihan.domain.result.Result;
import com.zihan.domain.vo.ProjectVO;

import java.util.List;

/**
 * <p>
 * 科研项目表 服务类
 * </p>
 *
 * @author zhangzihan
 * @since 2025-10-20
 */
public interface IProjectService extends IService<Project> {

    /**
     * 创建项目
     * @param project
     * @return
     */
    Result<String> create(ProjectDTO project);


    /**
     * 获取返回当前教师项目列表信息
     * @param projectDTO
     * @return
     */
    Result<PageResult> getList(ProjectDTO projectDTO);

    // 获取项目详情
    Result<ProjectVO> detail(Long id);

    // 获取项目成员
    Result<List<ProjectMember>> member(Long id);

    // 获取项目节点以及文档列表
    Result<List<ProjectMilestone>> getMilestonDetail(Long projectId);

    // 删除项目节点
    Result<String> deleteMilestone(Long id);

    // 更新项目信息
    Result<String> updateProject(ProjectDTO project);

    // 删除项目
    Result<String> deleteByProjectId(Long id);

    // 邀请学生
    Result<String> invite(JSONObject params);

    // 获取学生自己的邀请列表信息
    Result<PageResult> invitationsStudentList(ProjectDTO projectDTO);

    // 接受邀请
    Result<String> acceptInvitation(Long id);

    Result<String> refuseInvitation(Long id,String  reason);

    Result<List<ProjectMilestone>> getStudentMilestone(Long id);

    // 上传项目节点
    Result<String> uploadMilestone(JSONObject params);

    // 删除节点文档
    Result<String> deleteMilestoneDocument(Long id);

    // 移除项目成员
    Result<String> removeMember(Long id);

    Result<PageResult> getStudentProject(ProjectDTO projectDTO);
}
